package com.supermarket.mapper;

import com.supermarket.entity.OrderPayment;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 订单支付信息Mapper接口
 */
@Mapper
public interface OrderPaymentMapper {
    /**
     * 创建支付信息
     * @param orderPayment 支付信息
     * @return 影响行数
     */
    int insertOrderPayment(OrderPayment orderPayment);
    
    /**
     * 更新支付信息
     * @param orderPayment 支付信息
     * @return 影响行数
     */
    int updateOrderPayment(OrderPayment orderPayment);
    
    /**
     * 根据ID查询支付信息
     * @param id 支付ID
     * @return 支付信息
     */
    OrderPayment selectOrderPaymentById(@Param("id") Integer id);
    
    /**
     * 根据订单ID查询支付信息
     * @param orderId 订单ID
     * @return 支付信息
     */
    OrderPayment selectOrderPaymentByOrderId(@Param("orderId") Integer orderId);
    
    /**
     * 根据支付流水号查询支付信息
     * @param paymentNo 支付流水号
     * @return 支付信息
     */
    OrderPayment selectOrderPaymentByPaymentNo(@Param("paymentNo") String paymentNo);
    
    /**
     * 根据支付状态查询支付信息列表
     * @param paymentStatus 支付状态
     * @return 支付信息列表
     */
    List<OrderPayment> selectOrderPaymentsByStatus(@Param("paymentStatus") String paymentStatus);
    
    /**
     * 更新支付状态
     * @param id 支付ID
     * @param paymentStatus 支付状态
     * @param updateTime 更新时间
     * @return 影响行数
     */
    int updatePaymentStatus(@Param("id") Integer id, @Param("paymentStatus") String paymentStatus, @Param("updateTime") Date updateTime);
    
    /**
     * 更新支付流水号
     * @param id 支付ID
     * @param paymentNo 支付流水号
     * @return 影响行数
     */
    int updatePaymentNo(@Param("id") Integer id, @Param("paymentNo") String paymentNo);
    
    /**
     * 更新支付时间
     * @param id 支付ID
     * @param paymentTime 支付时间
     * @return 影响行数
     */
    int updatePaymentTime(@Param("id") Integer id, @Param("paymentTime") Date paymentTime);
    
    /**
     * 根据时间范围查询支付信息
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 支付信息列表
     */
    List<OrderPayment> selectOrderPaymentsByTimeRange(@Param("startTime") Date startTime, @Param("endTime") Date endTime);
    
    /**
     * 查询特定支付平台的支付信息
     * @param paymentPlatform 支付平台
     * @return 支付信息列表
     */
    List<OrderPayment> selectOrderPaymentsByPlatform(@Param("paymentPlatform") String paymentPlatform);
} 